// hook 函数 关注逻辑的复用

import { OrderType } from '@/enums'
import { cancelOrder, careHanler, deleteOrder, getPrescriptionPic } from '@/services'
import type { CareType, ConsultOrderItem, DoctorItem } from '@/types/consult'
import { showImagePreview, showSuccessToast } from 'vant'
import { ref } from 'vue'

// 命名规范: useXxx
export const useFollow = (type: CareType) => {
  const loading = ref(false)

  // 因为医生的item 和 文章的 item 不一样所以报错, 我们只需要将他们两个都用到的字段进行声明就可以
  const follow = async (item: { id: string; likeFlag: number }) => {
    loading.value = true
    try {
      await careHanler(item.id, 'doc')
    } finally {
      loading.value = false
    }

    // 因为只改变 关注和已关注  所以我们不需要对去刷新整个接口全部改变, 我们只需要对这个字段进行改变
    item.likeFlag = item.likeFlag === 0 ? 1 : 0
  }
  // 需要将外面用到的功能 return 出去
  return { loading, follow }
}

// 查看处方
export const useShowPrescription = () => {
  const previewPrescription = async (id?: string) => {
    if (id) {
      const res = await getPrescriptionPic(id)
      showImagePreview([res.data.url])
    }
  }
  return { previewPrescription }
}

// 取消订单

export const useCancleOrder = () => {
  const loading = ref(false)
  const oncancelOrder = async (item: ConsultOrderItem) => {
    try {
      loading.value = true
      await cancelOrder(item.id)
      // 修改订单的类型
      item.status = OrderType.ConsultCancel
      // 修改状态
      item.statusValue = '已取消'
      // 提示
      showSuccessToast('修改成功')
    } finally {
      // 修改loading 的状态
      loading.value = true
    }
  }
  return { loading, oncancelOrder }
}

// 删除订单

export const useDeleteOrder = (cb: () => void) => {
  const deleteLoading = ref(false)
  const delOrder = async (item: ConsultOrderItem) => {
    deleteLoading.value = true
    try {
      // 后端删除
      await deleteOrder(item.id)
      showSuccessToast('删除成功')
      // 前端删除, 因为这是子组件, 数据在父组件的里面, 所以需要借助父组件的自定义事件去删除
      cb && cb()
    } finally {
      deleteLoading.value = false
    }
  }
  return { deleteLoading, delOrder }
}
